package com.tbb.app.base.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tbb.app.base.dto.NoteAddDTO;
import com.tbb.app.base.entity.Note;
import com.tbb.app.base.search.NoteAdminPageSearch;
import com.tbb.app.base.search.NotePageSearch;
import com.tbb.app.base.search.NoteUserPageSearch;
import com.tbb.app.base.vo.NoteAdminDetailVO;
import com.tbb.app.base.vo.NoteAdminVO;
import com.tbb.app.base.vo.NoteVO;
import com.tbb.app.base.vo.SimpleVO;
import com.tbb.app.common.entity.PageBeanSearch;

import java.util.List;

/**
 * 笔记表 服务类
 *
 * @author Liu
 * @since 2022-01-11
 */
public interface INoteService extends IService<Note> {

    /**
     * 分页查询笔记
     *
     * @param search
     * @param isSearch
     * @return
     */
    IPage<NoteVO> page(NotePageSearch search, boolean isSearch);

    IPage<Note> pageVideo(NotePageSearch search, boolean isSearch);

    /**
     * 根据用户id分页查询笔记
     *
     * @param search
     * @return
     */
    IPage<NoteVO> page(NoteUserPageSearch search);

    /**
     * 笔记管理分页
     *
     * @param search
     * @return
     */
    IPage<NoteAdminVO> page(NoteAdminPageSearch search);

    /**
     * 查询笔记详情
     *
     * @param noteId
     * @param isEdit
     * @return
     */
    NoteVO detail(String noteId, boolean isEdit);

    /**
     * 维护点赞数
     *
     * @param noteId
     * @param i
     */
    void likeNum(String noteId, int i);

    /**
     * 维护收藏数
     *
     * @param noteId
     * @param i
     */
    void collectNum(String noteId, int i);

    /**
     * 维护评论数
     *
     * @param noteId
     * @param i
     */
    void remarkNum(String noteId, int i);

    /**
     * 发布笔记，保存草稿
     *
     * @param dto
     * @param isPublish
     */
    void add(NoteAddDTO dto, boolean isPublish);

    /**
     * 分页查询笔记草稿
     *
     * @param search
     * @return
     */
    IPage<NoteVO> pageDraft(PageBeanSearch search);

    /**
     * 根据用户id获取
     *
     * @param userId
     * @return
     */
    List<Note> listByUserId(String userId);

    /**
     * 查询热门笔记
     *
     * @param channelId
     * @param size
     * @return
     */
    List<NoteVO> listHeat(String channelId, int size);

    /**
     * 笔记分布
     *
     * @return
     */
    List<SimpleVO> noteChannel();

    /**
     * 删除笔记
     *
     * @param noteId
     */
    void removeNote(String noteId);

    /**
     * 笔记详情
     *
     * @param id
     * @return
     */
    NoteAdminDetailVO detailNote(String id);
}
